home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / X11 / lds / file.c < prev    next >
C/C++ Source or Header  |  1995-05-03  |  3KB  |  85 lines

  1. /*************************************************************************
  2.  *                                                                       *
  3.  *  Copyright (c) 1992, 1993 Ronald Joe Record                           *
  4.  *                                                                       *
  5.  *  All rights reserved. No part of this program or publication may be   *
  6.  *  reproduced, transmitted, transcribed, stored in a retrieval system,  *
  7.  *  or translated into any language or computer language, in any form or *
  8.  *  by any means, electronic, mechanical, magnetic, optical, chemical,   *
  9.  *  biological, or otherwise, without the prior written permission of:   *
  10.  *                                                                       *
  11.  *      Ronald Joe Record (408) 458-3718                                 *
  12.  *      212 Owen St., Santa Cruz, California 95062 USA                   *
  13.  *                                                                       *
  14.  *************************************************************************/
  15.  
  16. #include <stdio.h>
  17. #include <stdlib.h>
  18. #include "x.h"
  19. #include "defines.h"
  20. #include "externals.h"
  21. #include "xexterns.h"
  22.  
  23. void
  24. Cleanup() {
  25.     freemem();
  26.     XCloseDisplay(dpy);
  27. }
  28.  
  29. /* Store color pics in PPM format and monochrome in PGM */
  30. void
  31. save_to_file(map) 
  32. Pixmap map;
  33. {
  34.     FILE *outfile;
  35.     unsigned char c;
  36.     XImage *ximage;
  37.     static int i,j;
  38.     struct Colormap {
  39.         unsigned char red;
  40.         unsigned char green;
  41.         unsigned char blue;
  42.     };
  43.     struct Colormap *colormap=NULL;
  44.  
  45.     if (colormap)
  46.         free(colormap);
  47.     if ((colormap=
  48.         (struct Colormap *)malloc(sizeof(struct Colormap)*numcolors))
  49.             == NULL) {
  50.         fprintf(stderr,"Error malloc'ing colormap array\n");
  51.         Cleanup();
  52.         exit(-1);
  53.     }
  54.     outfile = fopen(outname,"w");
  55.     if(!outfile) {
  56.         perror(outname);
  57.         Cleanup();
  58.         exit(-1);
  59.     }
  60.  
  61.     ximage=XGetImage(dpy, map, 0, 0, width, height, AllPlanes, ZPixmap);
  62.  
  63.     if (displayplanes > 1) {
  64.         for (i=0;i<numcolors;i++) {
  65.             colormap[i].red=(unsigned char)(Colors[i].red >> 8);
  66.             colormap[i].green=(unsigned char)(Colors[i].green >> 8);
  67.             colormap[i].blue =(unsigned char)(Colors[i].blue >> 8);
  68.         }
  69.         fprintf(outfile,"P%d %d %d\n",6,width,height);
  70.     }
  71.     else
  72.         fprintf(outfile,"P%d %d %d\n",5,width,height);
  73.     fprintf(outfile,"%d\n",numcolors-1);
  74.  
  75.     for (j=0;j<height;j++)
  76.         for (i=0;i<width;i++) {
  77.         c = (unsigned char)XGetPixel(ximage,i,j);
  78.         if (displayplanes > 1)
  79.             fwrite((char *)&colormap[c],sizeof colormap[0],1,outfile);
  80.         else
  81.             fwrite((char *)&c,sizeof c,1,outfile);
  82.         }
  83.     fclose(outfile);
  84. }
  85.